<html>
<head>
<link rel="stylesheet" href="page.css" type="text/css">
<title>Documentation: File Manipulation</title>
</head>
<body bgcolor=#ffffff link=#990033 vlink=#990033 alink=#990033 text=#000000>

<!---- TOPIC TITLE WITH LOGO--->
<table border=0 cellpadding= cellspacing=2 width=100% ><tr><td><a href='http://www.fox-toolkit.org' target=_top><img src='art/foxlogo_small.jpg' border=0></a></td><td width=100% valign=bottom id="HEADLINE"><b>
Documentation: File Manipulation  <A href='filefuncs.html' target="_top" align=left><font  size=-2>[Remove Frame]</font></a>
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE WITH LOGO --->
<ul>
<p>Almost all applications will eventually be faced with the need to manipulate
file, and directories, and access the underlying operating system's file system.&nbsp;
In FOX, a large collection of
useful filename and directory name manipulation functions is provided with which you
can perform these tasks easily.
<br>Moreover, the FOX file manipulations are aware of platform specific
idiosyncracies, such as UNC under MS-Windows and escaping sequences under
UNIX.
</p>
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Finding Special Directories
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
<p>Certain directories in the file system are special, like the applications current working
directory, the users home directory, and so on.  FOX supplies the following functions
for this purpose:</p>

<P><BR>FXString<B> getEnvironment</B>(const FXString& <B><I>name</I></B>)
<BLOCKQUOTE>This function obtains the environment variable <B><I>name</I></B>
from the environment.  It returns the empty string if not found.</BLOCKQUOTE></p>

<P><BR>FXString<B> getHomeDirectory</B>()
<BLOCKQUOTE>Returns the current user's home directory.</BLOCKQUOTE>

<P><BR>FXString<B> getUserDirectory</B>(const FXString& <B><I>user</I></B>)
<BLOCKQUOTE>Returns the home directory of the named <B><I>user</I></B>, or the current
user's home directory if the parameter <B><I>user</I></B> is empty.</BLOCKQUOTE>

<P><BR>FXString<B> setCurrentDirectory</B>(const FXString& <B><I>path</I></B>)
<BLOCKQUOTE>Change the application's current working directory to <B><I>path</I></B></BLOCKQUOTE>

<P><BR>FXString<B> getCurrentDirectory</B>()
<BLOCKQUOTE>Returns the current working directory of the application.</BLOCKQUOTE>

<P><BR>FXString<B> setCurrentDrive</B>(const FXString& <B><I>prefix</I></B>)
<BLOCKQUOTE>Change the application's current drive letter to <B><I>prefix</I></B>,
where <B><I>prefix</I></B> is the drive letter, like "a:", "b:", and so on.
This function of course has no effect on UNIX systems.</BLOCKQUOTE>

<P><BR>FXString<B> getCurrentDrive</B>()
<BLOCKQUOTE>Returns the current drive letter of the application.
This function of course has no effect on UNIX systems.</BLOCKQUOTE>

<P><BR>FXString<B> getExecPath</B>()
<BLOCKQUOTE>Returns the path along which the systems shell usually locates executable
programs, or "$PATH".  The returned path string is a sequence of directories separated
by <B><I>PATHLISTSEP</I></B>.</BLOCKQUOTE></p>

</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Filename Manipulation
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
<p>Manipulating filenames is done with the following functions:</p>

<P><BR>FXString<B> directory</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return the directory part of <B><I>file</I></B>.
Note that <B>directory</B>("/bla/bla/") yields "/bla/bla" and NOT "/bla".
However, <B>directory</B>("/bla/bla") yields "/bla" as we expect!</BLOCKQUOTE>

<P><BR>FXString<B> name</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return name and extension part of <B><I>file</I></B>.
Note that <B>name</B>("/bla/bla/") yields "" and NOT "bla".
However, <B>name</B>("/bla/bla") yields "bla" as we expect.</BLOCKQUOTE>

<P><BR>FXString<B> title</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return title part of <B><I>file</I></B>.
This is the name of the document with the directory part and the extension part
removed.</BLOCKQUOTE>

<P><BR>FXString<B> extension</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return extension part of <B><I>file</I></B>.</BLOCKQUOTE>

<P><BR>FXString<B> stripExtension</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Strip the extension part of <B><I>file</I></B>.</BLOCKQUOTE>

<P><BR>FXString<B> drive</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return the drive letter part of <B><I>file</I></B>.
Of course, on UNIX systems this will return the empty string.</BLOCKQUOTE>

<P><BR>FXString<B> expand</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Expand meta-characters in <B><I>file</I></B>.
On UNIX systems, "~" is expanded into the current user's home directory,
"~user" into the given user's home directory, via <B>getUserDirectory</B>().
Also, "$VARIABLE", "${VARIABLE}", or "$(VARIABLE)" will be expanded into the
environment variable VARIABLE, via <B>getEnvironment</B>().
On MS-Windows, environment variables of the form "%VARIABLE%" are expanded
similarly.</BLOCKQUOTE>

<P><BR>FXString<B> simplify</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return the simplest pathname representation of  <B><I>file</I></B>.
The path will remain relative if it was relative, or absolute if it was absolute.
Also, a trailing "/" will be preserved as this is important in other functions.
For example, simplify("..//aaa/./bbb//../c/") yields "../aaa/c/".</BLOCKQUOTE>

<P><BR>FXString<B> absolute</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return the absolute path to the <B><I>file</I></B>,
given the current working directory and drive letter.</BLOCKQUOTE>

<P><BR>FXString<B> absolute</B>(const FXString& <B><I>base</I></B>,const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Build the absolute path to the <B><I>file</I></B>,
from the given <B><I>base</I></B> directory and <B><I>file</I></B>.</BLOCKQUOTE>

<P><BR>FXString<B> relative</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return the path to <B><I>file</I></B>, relative to the current working directory.</BLOCKQUOTE>

<P><BR>FXString<B> relative</B>(const FXString& <B><I>base</I></B>,const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return the path to <B><I>file</I></B>, relative to the directory <B><I>base</I></B>.</BLOCKQUOTE>

<P><BR>FXString<B> enquote</B>(const FXString& <B><I>file</I></B>,FXbool <B><I>forcequotes</I></B>=FALSE)
<BLOCKQUOTE>Enquote <B><I>file</I></B> to make safe for shell.  Normally, quotes
are only generated when necessary, but if <B><I>forcequotes</I></B> is TRUE quotes are always generated
regarless of necessity.<br>
Files with special characters need to be quoted before they may be passed to bash, ksh, csh (UNIX)
or cmd (MS-Windows).</BLOCKQUOTE>

<P><BR>FXString<B> dequote</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Dequote <B><I>file</I></B> to yield the original again.</BLOCKQUOTE>

<P><BR>FXString<B> unique</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Generate unique filename of the form "pathnameXXX.ext", where
pathname.ext is the original input <B><I>file</I></B>, and XXX is a number,
possibly empty, that makes the file unique.</BLOCKQUOTE>

<P><BR>FXString<B> search</B>(const FXString& <B><I>pathlist</I></B>,const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Search <B><I>pathlist</I></B> for this <B><I>file</I></B>, return full path
name for first occurrence.  The <B><I>pathlist</I></B> is a <B><I>PATHLISTSEP</I></B> separated
list of directories, such as returned by <B>getExecPath</B>.</BLOCKQUOTE>

<P><BR>FXString<B> upLevel</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return path to directory above input directory <B><I>file</I></B>.</BLOCKQUOTE></p>


</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Obtaining information about files
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  <p>A number of functions are also available to obtain various kinds of information about files
or directories:</p>

<P><BR>FXbool<B> isAbsolute</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if <B><I>file</I></B> is an absolute pathname.</BLOCKQUOTE>

<P><BR>FXbool<B> isTopDirectory</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if input <B><I>file</I></B> is a top-level directory.</BLOCKQUOTE>

<P><BR>FXbool<B> isFile</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if input <B><I>file</I></B> is a file name.</BLOCKQUOTE>

<P><BR>FXbool<B> isLink</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if input <B><I>file</I></B> is a link.</BLOCKQUOTE>

<P><BR>FXbool<B> isDirectory</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if input <B><I>file</I></B> is a directory.</BLOCKQUOTE>

<P><BR>FXbool<B> isReadable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if input <B><I>file</I></B> is readable.</BLOCKQUOTE>

<P><BR>FXbool<B> isWritable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if input <B><I>file</I></B> is writable.</BLOCKQUOTE>

<P><BR>FXbool<B> isExecutable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if input <B><I>file</I></B> is executable.</BLOCKQUOTE>

<P><BR>FXbool<B> isOwnerReadWriteExecute</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if owner has read-write-execute permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isOwnerReadable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if owner has read permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isOwnerWritable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if owner has write permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isOwnerExecutable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if owner has execute permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isGroupReadWriteExecute</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if group has read-write-execute permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isGroupReadable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if group has read permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isGroupWritable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if group has write permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isGroupExecutable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if group has execute permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isOtherReadWriteExecute</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if others have read-write-execute permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isOtherReadable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if others have read permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isOtherWritable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if others have write permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isOtherExecutable</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if others have execute permissions.</BLOCKQUOTE>

<P><BR>FXbool<B> isSetUid</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if the <B><I>file</I></B> sets the user id on execution.</BLOCKQUOTE>

<P><BR>FXbool<B> isSetGid</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if the <B><I>file</I></B> sets the group id on execution.</BLOCKQUOTE>

<P><BR>FXbool<B> isSetSticky</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if the <B><I>file</I></B> has the sticky bit set.</BLOCKQUOTE>

<P><BR>FXString<B> owner</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return owner name of <B><I>file</I></B>, if available; otherwise "user".</BLOCKQUOTE>

<P><BR>FXString<B> group</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return group name of <B><I>file</I></B>, if available; otherwise "group".</BLOCKQUOTE>

<P><BR>unsigned long<B> size</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return size of <B><I>file</I></B> in bytes</BLOCKQUOTE>

<P><BR>FXTime<B> modified</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return last modified time of <B><I>file</I></B>.</BLOCKQUOTE>

<P><BR>FXTime<B> accessed</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return last accessed time of <B><I>file</I></B>.</BLOCKQUOTE>

<P><BR>FXTime<B> created</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return create-time of <B><I>file</I></B>.</BLOCKQUOTE>

<P><BR>FXTime<B> touched</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return touched time of <B><I>file</I></B>.</BLOCKQUOTE></p>
</ul>



<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Copying, Moving, Linking Files
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
<p>The following operations are available on files:</p>

<P><BR>FXbool<B> createDirectory</B>(const FXString& <B><I>path</I></B>,FXuint <B><I>mode</I></B>)
<BLOCKQUOTE>Create new directory <B><I>path</I></B>, with permissions set to <B><I>mode</I></B>.</BLOCKQUOTE>

<P><BR>FXbool<B> createFile</B>(const FXString& <B><I>file</I></B>,FXuint <B><I>mode</I></B>)
<BLOCKQUOTE>Create new empty <B><I>file</I></B>, with permissions set to <B><I>mode</I></B>.</BLOCKQUOTE>

<P><BR>FXbool<B> concatenate</B>(const FXString& <B><I>srcfile1</I></B>,const FXString& <B><I>srcfile2</I></B>,const FXString& <B><I>dstfile</I></B>,FXbool <B><I>overwrite</I></B>=FALSE)
<BLOCKQUOTE>Concatenate <B><I>srcfile1</I></B> and <B><I>srcfile2</I></B> to a <B><I>dstfile</I></B>.
If <B><I>overwrite</I></B> is true, then the operation fails if <B><I>dstfile</I></B> already exists.
<B><I>srcfile1</I></B> and <B><I>srcfile2</I></B> should not be the same as <B><I>dstfile</I></B>.</BLOCKQUOTE>

<P><BR>FXbool<B> remove</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Remove <B><I>file</I></B> or directory, recursively.</BLOCKQUOTE>

<P><BR>FXbool<B> copy</B>(const FXString& <B><I>srcfile</I></B>,const FXString& <B><I>dstfile</I></B>,FXbool <B><I>overwrite</I></B>=FALSE)
<BLOCKQUOTE>Copy <B><I>srcfile</I></B> to a <B><I>dstfile</I></B>, recursively if <B><I>srcfile</I></B>
is a directory.
If <B><I>overwrite</I></B> is true, then the operation fails if <B><I>dstfile</I></B> or a file inside <B><I>dstfile</I></B>
already exists.</BLOCKQUOTE>

<P><BR>FXbool<B> move</B>(const FXString& <B><I>srcfile</I></B>,const FXString& <B><I>dstfile</I></B>,FXbool <B><I>overwrite</I></B>=FALSE)
<BLOCKQUOTE>Move <B><I>srcfile</I></B> to a <B><I>dstfile</I></B>, recursively if <B><I>srcfile</I></B>
is a directory.
If <B><I>overwrite</I></B> is true, then the operation fails if <B><I>dstfile</I></B> or a file inside <B><I>dstfile</I></B>
already exists.
If <B><I>srcfile</I></B> and <B><I>dstfile</I></B> are on the same file system, the files are moved;
if <B><I>srcfile</I></B> and <B><I>dstfile</I></B> are on different file systems, the files are copied
and the original <B><I>srcfile</I></B> is removed only after all files have been copied successfully.</BLOCKQUOTE>

<P><BR>FXbool<B> link</B>(const FXString& <B><I>srcfile</I></B>,const FXString& <B><I>dstfile</I></B>,FXbool <B><I>overwrite</I></B>=FALSE)
<BLOCKQUOTE>Link <B><I>dstfile</I></B> to <B><I>srcfile</I></B>.
If <B><I>overwrite</I></B> is true, then the operation fails if <B><I>dstfile</I></B>already exists.
If <B><I>srcfile</I></B> and <B><I>dstfile</I></B> are on different filesystems, the operation will fail.
</BLOCKQUOTE>

<P><BR>FXbool<B> symlink</B>(const FXString& <B><I>srcfile</I></B>,const FXString& <B><I>dstfile</I></B>,FXbool <B><I>overwrite</I></B>=FALSE)
<BLOCKQUOTE>Make a symbolic link from <B><I>dstfile</I></B> to <B><I>srcfile</I></B>.
If <B><I>overwrite</I></B> is true, then the operation fails if <B><I>dstfile</I></B>already exists.
</BLOCKQUOTE>

<P><BR>FXString<B> symlink</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return the destination of the symlink <B><I>file</I></B>.
</BLOCKQUOTE></p>

</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Other File Operations
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
<p>Finally, some operations which don't fit in any easy categories:</p>

<P><BR>FXbool<B> match</B>(const FXString& <B><I>pattern</I></B>,const FXString& <B><I>file</I></B>,FXuint <B><I>flags</I></B>=(FILEMATCH_NOESCAPE|FILEMATCH_FILE_NAME))
<BLOCKQUOTE>Perform wildcard match of <B><I>file</I></B> against the <B><I>pattern</I></B>.
The pattern may contain special wild-card characters:</p>

<p>
<TABLE>
<TR><TD>?</TD><TD>Matches single character.</TD></TR>
<TR><TD>*</TD><TD>Matches zero or more characters.</TD></TR>
<TR><TD>[abc]</TD><TD>Matches a single character, which must be a, b, or c.</TD></TR>
<TR><TD>[^abc]</TD><TD>Matches a single character, which must be anything other than a, b, or c.</TD></TR>
<TR><TD>[!abc]</TD><TD>Ditto.</TD></TR>
<TR><TD>[a-zA-Z]</TD><TD>Matches single character, which must be one of a-z or A-Z.</TD></TR>
<TR><TD>[^a-zA-Z]</TD><TD>Matches single character, which must be anything other than a-z or A-Z.</TD></TR>
<TR><TD>[!a-zA-Z]</TD><TD>Ditto.</TD></TR>
<TR><TD>pat1|pat2</TD><TD>Matches either pat1 or pat2.</TD></TR>
<TR><TD>pat1,pat2</TD><TD>Ditto.</TD></TR>
<TR><TD>(pat1|pat2)</TD><TD>Matches either pat1 or pat2; patterns may be nested.</TD></TR>
<TR><TD>(pat1,pat2)</TD><TD>Ditto.</TD></TR>
</TABLE>
</p>
<p>Matching can be influenced using the flags as follows:</p>


<TABLE>
<TR><TD>FILEMATCH_FILE_NAME</TD><TD>No wildcard can ever match "/" (or "\","/" under Windows).</TD></TR>
<TR><TD>FILEMATCH_NOESCAPE</TD><TD>Backslashes don't quote special chars ("\" is treated as "\").</TD></TR>
<TR><TD>FILEMATCH_PERIOD</TD><TD>Leading "." is matched only explicitly (Useful to match hidden files on Unix).</TD></TR>
<TR><TD>FILEMATCH_LEADING_DIR</TD><TD>Ignore "/..." after a match.</TD></TR>
<TR><TD>FILEMATCH_CASEFOLD</TD><TD>Compare without regard to case.</TD></TR>
</TABLE>

<p>For example,</p>
<TABLE>
<TR><TD>*.cpp|*.cc|*.cxx|*.C</TD><TD>Matches some common extensions for C++ source files.</TD></TR>
<TR><TD>image.(bmp,gif,jpg)</TD><TD>Matches a file called image given as either bmp, gif, or jpg.</TD></TR>
<TR><TD>*.[^o]</TD><TD>Matches any file except object files.</TD></TR>
</TABLE>
</BLOCKQUOTE>

<P><BR>FXint<B> listFiles</B>(FXString*& <B><I>list</I></B>,const FXString& <B><I>path</I></B>,const FXString& <B><I>pattern</I></B>="*",FXuint <B><I>flags</I></B>=LIST_MATCHING_FILES|LIST_MATCHING_DIRS)
<BLOCKQUOTE>List files matching <B><I>pattern</I></B> in the directory given by <B><I>path</I></B>.
Returns the number of files in the string-array <B><I>list</I></B> which matched the pattern
or satisfied the <B><I>flag</I></B> conditions.
The flags parameter can be a combination of the following:</p>


<TABLE>
<TR><TD>LIST_MATCHING_FILES</TD><TD>Match files (default).</TD></TR>
<TR><TD>LIST_MATCHING_DIRS</TD><TD>Match directories (default).</TD></TR>
<TR><TD>LIST_NO_FILES</TD><TD>Do not match any files.</TD></TR>
<TR><TD>LIST_NO_DIRS</TD><TD>Do not match any directories.</TD></TR>
<TR><TD>LIST_ALL_FILES</TD><TD>Match all files.</TD></TR>
<TR><TD>LIST_ALL_DIRS</TD><TD>Match all directories.</TD></TR>
<TR><TD>LIST_HIDDEN_FILES</TD><TD>Match hidden files also.</TD></TR>
<TR><TD>LIST_HIDDEN_DIRS</TD><TD>Match hidden directories also.</TD></TR>
<TR><TD>LIST_NO_PARENT</TD><TD>Do not match "..".</TD></TR>
<TR><TD>LIST_CASEFOLD</TD><TD>Perform case insensitive matching.</TD></TR>
</TABLE>
</BLOCKQUOTE>

<P><BR>FXTime<B> now</B>()
<BLOCKQUOTE>Return current time.</BLOCKQUOTE>

<P><BR>FXString<B> time</B>(FXTime <B><I>filetime</I></B>)
<BLOCKQUOTE>Convert <B><I>filetime</I></B> to date-string.</BLOCKQUOTE>

<P><BR>FXString<B> time</B>(const FXchar *<B><I>format</I></B>,FXTime <B><I>filetime</I></B>)
<BLOCKQUOTE>Convert file time to date-string as per <B>strftime(3)</B>.
Format characters supported by most systems are:
<p>
<BLOCKQUOTE>%a %A %b %B %c %d %H %I %j %m %M %p %S %U %w %W %x %X %y %Y %Z %%</BLOCKQUOTE>
<p>
Some systems support additional conversions.
</BLOCKQUOTE>

<P><BR>FXbool<B> info</B>(const FXString& <B><I>file</I></B>,struct stat& <B><I>info</I></B>)
<BLOCKQUOTE>Return <B><I>info</I></B> of <B><I>file</I></B> as reported by system stat(2) function.</BLOCKQUOTE>

<P><BR>FXbool<B> exists</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return true if <B><I>file</I></B> exists.</BLOCKQUOTE>

<P><BR>FXbool<B> identical</B>(const FXString& <B><I>file1</I></B>,const FXString& <B><I>file2</I></B>)
<BLOCKQUOTE>Return true if <B><I>file1</I></B> and <B><I>file2</I></B> are identical, i.e. refer to
the same inode.</BLOCKQUOTE>

<P><BR>FXuint<B> mode</B>(const FXString& <B><I>file</I></B>)
<BLOCKQUOTE>Return the permissions of <B><I>file</I></B>.</BLOCKQUOTE>

<P><BR>FXbool<B> mode</B>(const FXString& <B><I>file</I></B>,FXuint <B><I>mode</I></B>)
<BLOCKQUOTE>Change the permission of <B><I>file</I></B> to <B><I>mode</I></B>.</BLOCKQUOTE>

</p>
</ul>
<!--- COPYRIGHT -->
<p>
<table width=100% cellpadding=0 cellspacing=0><tr><td width=100% valign=top id=HEADLINE align=right>
<img src='art/line.gif' width=100% height=1><font size=-1>
Copyright &copy; 1997-2005 Jeroen van der Zijp</font>
</td></tr></table>
</p>
<!--- COPYRIGHT -->


</body>
</html>
